import { fullArray } from "./utils";

const defaultCourtList = [
    'c4w',
    'ladder',
    'one',
    'excavate',
    '2w',
    '3w',
    '4w',
    'custom1',
    'custom2',
    'custom3',
    'custom4',
    'custom5',
    'custom6',
    'custom7',
    'custom8',
    'custom9',
    'custom10',
]

const formularyCourtList = [
    'pc',
]

const defaultCourt = (type = '', level = 1) => {
    if (type == 'c4w') { // 预设: c4w
        return [ // 渲染行为数组
            {
                y: [0, 19], // 渲染y坐标数组 多行
                mode: 'air', // 行为 air:先填充 再镂空 full:先镂空 再填充
                val: {
                    isRandom: false, // 是否随机
                    x: [3, 4, 5, 6], // 进行行为的x坐标
                }
            }
        ]
    }
    else if (type == 'ladder') { // 预设: 阶梯
        return [ // 渲染行为数组
            {
                y: [16, 19],
                mode: 'air',
                val: {
                    isRandom: true, // 随机行为x坐标
                    openNumber: 1, // 开口数
                }
            },
            {
                y: [12, 15],
                mode: 'air',
                val: {
                    isRandom: true, // 随机行为x坐标
                    openNumber: 1, // 开口数
                }
            },
            {
                y: [8, 11],
                mode: 'air',
                val: {
                    isRandom: true, // 随机行为x坐标
                    openNumber: 1, // 开口数
                }
            },
            {
                y: [4, 7],
                mode: 'air',
                val: {
                    isRandom: true, // 随机行为x坐标
                    openNumber: 1, // 开口数
                }
            },
        ]
    }
    else if (type == 'one') { // 预设: one
        return [ // 渲染行为数组
            {
                y: [0, 19], // 渲染y坐标数组 多行
                mode: 'air', // 行为 air:先填充 再镂空
                val: {
                    isRandom: true, // 随机行为x坐标
                    openNumber: 1, // 开口数
                }
            }
        ]
    }
    else if (type == 'excavate') { // 预设: 挖掘
        let res = []
        let height = 4
        let renderTime = 0
        if (level == 1) {
            height = 4
            renderTime = 4
        }
        else if (level == 2) {
            height = 3
            renderTime = 6
        }
        else if (level == 3) {
            height = 2
            renderTime = 9
        }
        else if (level == 4) {
            height = 1
            renderTime = 10
        }
        else if (level == 5) {
            height = 1
            renderTime = 18
        }
        let targetRenderY = 19
        for (let index = 0; index < renderTime; index++) {
            let y
            if (height == 1) y = [targetRenderY]
            else y = [targetRenderY - height + 1, targetRenderY]
            res.push({
                y, // 渲染y坐标数组 多行
                mode: 'air', // 行为 air:先填充 再镂空
                val: {
                    isRandom: true, // 随机行为x坐标
                    openNumber: 1, // 开口数
                }
            })
            targetRenderY -= height
        }
        return res
    }
    else if (type == '2w') { // 预设: 2w
        return [ // 渲染行为数组
            {
                y: [2, 19], // 渲染y坐标数组 多行
                mode: 'air',
                val: {
                    isRandom: false, // 是否随机
                    x: [8, 9], // 进行行为的x坐标
                }
            }
        ]
    }
    else if (type == '3w') { // 预设: 3w
        return [ // 渲染行为数组
            {
                y: [2, 19], // 渲染y坐标数组 多行
                mode: 'air',
                val: {
                    isRandom: false, // 是否随机
                    x: [7, 8, 9], // 进行行为的x坐标
                }
            }
        ]
    }
    else if (type == '4w') { // 预设: 4w
        return [ // 渲染行为数组
            {
                y: [2, 19], // 渲染y坐标数组 多行
                mode: 'air',
                val: {
                    isRandom: false, // 是否随机
                    x: [6, 7, 8, 9], // 进行行为的x坐标
                }
            }
        ]
    }
    else if (type == 'custom1') { // 预设: 自定义1 镂空4w
        return [ // 渲染行为数组
            {
                y: [16, 19],
                mode: 'air',
                val: {
                    isRandom: false,
                    x: [3, 4, 5, 6],
                }
            },
            {
                y: [12, 15],
                mode: 'full',
                val: {
                    isRandom: false,
                    x: [3, 4, 5, 6],
                }
            },
            {
                y: [8, 11],
                mode: 'air',
                val: {
                    isRandom: false,
                    x: [3, 4, 5, 6],
                }
            },
        ]
    }
    else if (type == 'custom2') { // 预设: 自定义2 镂空大于号
        let res = []
        let isBack = false
        let x = 0
        let y = 19
        while (y > 0) {
            res.push({
                y: [y],
                mode: 'air',
                val: {
                    isRandom: false, // 是否随机
                    x: [x], // 进行行为的x坐标
                }
            })
            y--
            if (isBack) x--
            else x++
            if (x >= 9) isBack = true
            if (x <= 0) isBack = false
        }
        return res
    }
    else if (type == 'custom3') { // 预设: 自定义3 超出屏幕c4w
        return [ // 渲染行为数组
            {
                y: [-20, 19], // 渲染y坐标数组 多行
                mode: 'air',
                val: {
                    isRandom: false,
                    x: [3, 4, 5, 6],
                }
            }
        ]
    }
    else if (type == 'custom4') { // 预设: 自定义4 高空作业
        return [ // 渲染行为数组
            {
                y: [2],
                mode: 'air',
                val: {
                    isRandom: true, // 随机行为x坐标
                    openNumber: 1, // 开口数
                }
            },
            {
                y: [4],
                mode: 'air',
                val: {
                    isRandom: true, // 随机行为x坐标
                    openNumber: 1, // 开口数
                }
            },
            {
                y: [6],
                mode: 'air',
                val: {
                    isRandom: true, // 随机行为x坐标
                    openNumber: 1, // 开口数
                }
            },
            {
                y: [8],
                mode: 'air',
                val: {
                    isRandom: true, // 随机行为x坐标
                    openNumber: 1, // 开口数
                }
            },
        ]
    }
    else if (type == 'custom5') { // 预设: 自定义5 隔层
        return [ // 渲染行为数组
            {
                y: [16, 19],
                mode: 'full',
                val: {
                    isRandom: false,
                    x: [0, 9],
                }
            },
            {
                y: [12, 15],
                mode: 'air',
                val: {
                    isRandom: false,
                    x: [0, 9],
                }
            },
            {
                y: [8, 11],
                mode: 'full',
                val: {
                    isRandom: false,
                    x: [0, 9],
                }
            },
            {
                y: [4, 7],
                mode: 'air',
                val: {
                    isRandom: false,
                    x: [0, 9],
                }
            },
        ]
    }
    else if (type == 'custom6') { // 预设: 自定义6 钻井
        return [ // 渲染行为数组
            {
                y: [5, 19],
                mode: 'full',
                val: {
                    isRandom: false,
                    x: [0, 2, 4, 5, 7, 9],
                }
            },
        ]
    }
    else if (type == 'custom7') { // 预设: 自定义7 两侧留空
        return [ // 渲染行为数组
            {
                y: [5, 19],
                mode: 'air',
                val: {
                    isRandom: false,
                    x: [0, 9],
                }
            },
        ]
    }
    else if (type == 'custom8') { // 预设: 自定义8 实体大于号
        let res = []
        let isBack = false
        let x = 0
        let y = 19
        while (y > 0) {
            res.push({
                y: [y],
                mode: 'full',
                val: {
                    isRandom: false, // 是否随机
                    x: x == 0 ? [x] : fullArray(0, x), // 进行行为的x坐标
                }
            })
            y--
            if (isBack) x--
            else x++
            if (x >= 9) isBack = true
            if (x <= 0) isBack = false
        }
        return res
    }
    else if (type == 'custom9') { // 预设: 自定义9 X形
        let res = []
        let x = 0
        let y = 19
        let isBack = false
        while (y > 2) {
            res.push({
                y: [y],
                mode: 'full',
                val: {
                    isRandom: false, // 是否随机
                    x: [x, 9 - x], // 进行行为的x坐标
                }
            })
            y--
            if (isBack) x--
            else x++
            if (x >= 4) isBack = true
            if (x <= 0) isBack = false
        }
        return res
    }
    else if (type == 'custom10') { // 预设: 自定义10 网格
        let res = []
        let y = 19
        while (y > 5) {
            res.push({
                y: [y],
                mode: y % 2 == 0 ? 'full' : 'air',
                val: {
                    isRandom: false, // 是否随机
                    x: [0, 2, 4, 6, 8], // 进行行为的x坐标
                }
            })
            y--
        }
        return res
    }
    else if (formularyCourt(type)) return formularyCourt(type) // 定式开局地图
    else return []
}

const formularyCourt = (type: string) => { // 定式开局
    if (type == 'pc') {
        return [ // 渲染行为数组
            {
                y: [17, 19],
                mode: 'air',
                val: {
                    isRandom: false,
                    x: [3, 4, 5],
                }
            },
            {
                y: [18],
                mode: 'air',
                val: {
                    isRandom: false,
                    x: [4, 5],
                }
            },
            {
                y: [16],
                mode: 'air',
                val: {
                    isRandom: false,
                    x: [2, 3, 4, 5],
                }
            },
        ]
    }
    else if (type == 'dt/left') {
        return [
            {
                y: [18, 19],
                mode: 'air',
                val: {
                    isRandom: false,
                    x: [2],
                }
            },
            {
                y: [17],
                mode: 'air',
                val: {
                    isRandom: false,
                    x: [1, 2, 3],
                }
            },
            {
                y: [16],
                mode: 'air',
                val: {
                    isRandom: false,
                    x: [1, 2],
                }
            },
            {
                y: [15],
                mode: 'air',
                val: {
                    isRandom: false,
                    x: [2],
                }
            },
            {
                y: [14],
                mode: 'air',
                val: {
                    isRandom: false,
                    x: [0, 1, 2],
                }
            },
            {
                y: [13],
                mode: 'air',
                val: {
                    isRandom: false,
                    x: [0, 1],
                }
            },
        ]
    }
    else if (type == 'dt/right') {
        return [
            {
                y: [18, 19],
                mode: 'air',
                val: {
                    isRandom: false,
                    x: [7],
                }
            },
            {
                y: [17],
                mode: 'air',
                val: {
                    isRandom: false,
                    x: [6, 7, 8],
                }
            },
            {
                y: [16],
                mode: 'air',
                val: {
                    isRandom: false,
                    x: [7, 8],
                }
            },
            {
                y: [15],
                mode: 'air',
                val: {
                    isRandom: false,
                    x: [7],
                }
            },
            {
                y: [14],
                mode: 'air',
                val: {
                    isRandom: false,
                    x: [7, 8, 9],
                }
            },
            {
                y: [13],
                mode: 'air',
                val: {
                    isRandom: false,
                    x: [8, 9],
                }
            },
        ]
    }
    else if (type == 'stsd') {
        return [ // 渲染行为数组
            {
                y: [18, 19],
                mode: 'air',
                val: {
                    isRandom: false,
                    x: [7, 8],
                }
            },
            {
                y: [17],
                mode: 'air',
                val: {
                    isRandom: false,
                    x: [7],
                }
            },
            {
                y: [16],
                mode: 'air',
                val: {
                    isRandom: false,
                    x: [7, 8, 9],
                }
            },
            {
                y: [15],
                mode: 'air',
                val: {
                    isRandom: false,
                    x: [8, 9],
                }
            },
        ]
    }
    else if (type == 'king crimson') {
        return [ // 渲染行为数组
            {
                y: [18, 19],
                mode: 'air',
                val: {
                    isRandom: false,
                    x: [1, 2],
                }
            },
            {
                y: [16, 17],
                mode: 'air',
                val: {
                    isRandom: false,
                    x: [2],
                }
            },
            {
                y: [15],
                mode: 'air',
                val: {
                    isRandom: false,
                    x: [1, 2],
                }
            },
            {
                y: [14],
                mode: 'air',
                val: {
                    isRandom: false,
                    x: [2],
                }
            },
            {
                y: [13],
                mode: 'air',
                val: {
                    isRandom: false,
                    x: [0, 1, 2],
                }
            },
            {
                y: [12],
                mode: 'air',
                val: {
                    isRandom: false,
                    x: [0, 1],
                }
            },
        ]
    }
    else false
}


export {
    defaultCourt,
    defaultCourtList,
    formularyCourtList,
    formularyCourt,
}